package com.yunzhong.appointment.system.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.github.pagehelper.PageInfo;
import com.yunzhong.appointment.entity.Department;
import com.yunzhong.appointment.entity.Person;
import com.yunzhong.appointment.entity.Professional;
import com.yunzhong.appointment.entity.SysUser;
import com.yunzhong.appointment.system.service.SysPersonService;
import com.yunzhong.appointment.util.PageData;

/**
 * @description 系统设置中人员控制器
 * @author 石洪刚
 * @time 2017年8月13日16:16:25
 */
@Controller
@RequestMapping("/sys")
public class SysPersonController{
	
	@Autowired
	private SysPersonService personService;
	
	/**
	 * @description 人员查询页
	 * @author 石洪刚
	 * @time 2017年8月18日00:53:48
	 * @param request
	 * @param mm
	 * @return
	 */
	@RequestMapping("/listPerson")
	public String listPerson(HttpServletRequest request,ModelMap mm){
		//接收前台数据
		PageData pd = new PageData(request);
		//查询数据
		List<Person> varList = personService.listPerson(pd);
		//得到分页数据
		PageInfo page = new PageInfo(varList);
		mm.put("page", page);
		mm.put("pd", pd);
		return "system/person/listPerson";
	}
	/**
	 * @description 人员增加或修改页
	 * @author 石洪刚
	 * @time 2017年8月18日00:54:06
	 * @param id
	 * @return
	 */
	@RequestMapping("/pagePerson")
	public String pagePerson(String id,ModelMap mm){
		//查询未关联用户
		List<SysUser> userList = personService.listUserNotLinked();
		//查询科室
		List<Department> deptList = personService.listDepartment();
		if(id!=null){
			Person person = personService.getPersonById(id);
			mm.put("person", person);
			//在关联用户集合中加入自己关联的用户
			SysUser u = personService.getLinkedUserByPpId(id);
			if(null!=u){
				userList.add(u);
			}
			//查询当前人员所属部门的职称列表
			if(StringUtils.isNotBlank(person.getDepartmentId())){
				List<Professional> proList = personService.listProfessionalByDeptId(person.getDepartmentId());
				mm.put("proList", proList);
			}
		}
		//判断用户是否有医生的角色，影响页面的展现
		personService.checkRoleDoc(userList);
		mm.put("userList", userList);
		mm.put("deptList", deptList);
		return "system/person/pagePerson";
	}
	/**
	 * @description 删除多条数据
	 * @author 石洪刚
	 * @time 2017年8月17日23:25:17
	 * @param ids
	 * @return
	 */
	@RequestMapping("/removePerson")
	public String removePerson(String[] ids){
		personService.removePerson(ids);
		return "redirect:listPerson";
	}
	/**
	 * @description 人员的增加或修改
	 * @param doc
	 * @param picFile
	 * @return
	 * @throws IOException 
	 */
	@RequestMapping("/saveOrUpdatePerson")
	public String saveOrUpdatePerson(Person doc,@RequestParam("pic")MultipartFile picFile) throws IOException{
		personService.saveOrUpdatePerson(doc,picFile);
		return "redirect:listPerson";
	}
	/**
	 * @description 根据部门主键查询职称
	 * @author 石洪刚
	 * @time 2017年9月12日14:28:54
	 * @param dpId
	 * @return
	 */
	@RequestMapping("/listProByDpId")
	@ResponseBody
	public List<Professional> listProByDpId(String dpId){
		List<Professional> proList = personService.listProfessionalByDeptId(dpId);
		return proList;
	}
}
